#ifndef SYSROOT_GRP_H_
#define SYSROOT_GRP_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <features.h>

#define __NEED_size_t
#define __NEED_gid_t

#ifdef _GNU_SOURCE
#define __NEED_FILE
#endif

#include <bits/alltypes.h>

struct group {
  char* gr_name;
  char* gr_passwd;
  gid_t gr_gid;
  char** gr_mem;
};

struct group* getgrgid(gid_t);
struct group* getgrnam(const char*);

int getgrgid_r(gid_t, struct group*, char*, size_t, struct group**);
int getgrnam_r(const char*, struct group*, char*, size_t, struct group**);

struct group* getgrent(void);
void endgrent(void);
void setgrent(void);

#ifdef _GNU_SOURCE
struct group* fgetgrent(FILE* stream);
int putgrent(const struct group*, FILE*);
#endif

#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
int getgrouplist(const char*, gid_t, gid_t*, int*);
int setgroups(size_t, const gid_t*);
int initgroups(const char*, gid_t);
#endif

#ifdef __cplusplus
}
#endif

#endif  // SYSROOT_GRP_H_
